#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//AC 714 --2024.11.12

//输入
//- 75
//- 91
//
//输出
//0
//标准答案
//- 581

//int main()
//{
//    int x, y;
//    scanf("%d %d", &x, &y);
//    if (x > y)
//    {
//        int change;
//        change = x;
//        x = y;
// //err//y = x; --> y = change;
//        y = change;
//    }
//    int i;
//    int count = 0;
//    for (i = x + 1;i < y;i++)
//    {
//        if (i % 2 == 1 || i % 2 == -1)
//            count += i;
//    }
//    printf("%d", count);
//    return 0;
//}



//int main()
//{
//    int i;//要scanf的可以不初始化，要控制循环的i也可以不初始化
//    for (i = 0;i < 3;i++)
//    {
//        printf("hehe\n");
//    }
//    return 0;
//}



//int main()
//{
//    int a = -3;
//    printf("%d\n", a % 2);//-1 //负的奇数 %2 == -1
//    return 0;
//}



//AC 666 --2024.11.11

//输入
//1.6 9.3 9.9
//输出
//TRIANGULO ACUTANGULO
//TRIANGULO ISOSCELES
//标准答案
//TRIANGULO OBTUSANGULO

//1.6  9.9-->9.0  9.3 
//1.6 1.6 9.3
//9.9-->9.0 1.6 9.3
//9.9-->9.0 1.6 1.6
//9.9-->9.0 9.3-->9.0 1.6

//int main()
//{
//    double a, b, c;
//    scanf("%lf %lf %lf", &a, &b, &c);
//    double arr[3] = { a,b,c };
//    int i;
//    //err//int change = 0;--> double change;
//    double change;
//    for (i = 0;i < 2;i++)
//    {
//        int j;
//        for (j = 2;j > 0 + i;j--)
//        {
//            if (arr[j] > arr[j - 1])
//            {
//                change = arr[j];
//                arr[j] = arr[j - 1];
//                arr[j - 1] = change;
//            }
//        }
//    }
//    if (arr[0] >= arr[1] + arr[2])
//        printf("NAO FORMA TRIANGULO\n");
//    else if (arr[0] * arr[0] == arr[1] * arr[1] + arr[2] * arr[2])
//        printf("TRIANGULO RETANGULO\n");
//    else if (arr[0] * arr[0] > arr[1] * arr[1] + arr[2] * arr[2])
//        printf("TRIANGULO OBTUSANGULO\n");
//    else
//        printf("TRIANGULO ACUTANGULO\n");
//    if (arr[0] == arr[1] && arr[1] == arr[2])
//        printf("TRIANGULO EQUILATERO\n");
//    else if (arr[0] == arr[1] || arr[0] == arr[2] || arr[1] == arr[2])
//        printf("TRIANGULO ISOSCELES");
//    return 0;
//}



//int main()
//{
//    int max, x = 0;//统一初始化
//    int x = 0, a, y;
//    int arr[100];
//    int i;
//    for (i = 0;i < 100;i++)
//    {//arr看成角标0就0~99的角标
//        scanf("%d", &(arr + i));
//    }//arr看成第一个元素1~100的元素
//
//    return 0;
//}



//while (~scanf("%d", &k)) --> 这样可以设置成可控的无限循环输入
//这个循环的机制是基于 scanf 函数的返回值和输入的扫描结果。while (~scanf("%d", &k)) 表示在输入一个整数时，scanf 将返回读取成功的元素个数（如果成功读取一个整数，返回值为 1；如果遇到文件结束符或者输入错误，则返回 EOF，即 - 1）。使用 ~操作符对返回值进行按位取反，可以将 EOF （ - 1）的取反结果变为 0，其他情况下返回的结果（如 1）取反为 - 2，条件成立，从而继续循环。
//
//具体来说，循环的退出机制如下：
//
//1.成功读取整数：当输入一个有效整数时，scanf 返回 1，取反后为 - 2，条件成立，继续进入循环。
//2.遇到文件结束或输入错误：当输入结束（通常是 EOF）或输入了无法转换为整数的数据时，scanf 返回 EOF（ - 1），取反后为 0，条件不成立，退出循环。



//AC 721 --2024.11.13

//int main()
//{
//    int a, i;
//    do
//    {
//        scanf("%d", &a);
//        for (i = 1;i <= a;i++)
//        {
//            printf("%d ", i);
//        }
//        if (a != 0)
//            printf("\n");//第一个scanf必要做且必先做再判断循环(因为while就是看scanf的值)
//    }//第一个scanf符不符合循环条件都必做，第二个的及之后的就要看循环条件了
//    while (a);
//    return 0;
//}
//每次都是必做完再判断这次能否，是先做再判断此次
// //改成一样了
//int main()
//{
//    int a, i;
//    scanf("%d", &a);//是循环里的内容却写了两遍
//    for (i = 1;i <= a;i++)
//    {
//     printf("%d ", i);
//    } 
//  printf("\n");
//    while (a)
//    {
//        scanf("%d", &a);
//        for (i = 1;i <= a;i++)
//        {
//            printf("%d ", i);
//        }
//        printf("\n");
//    }
//    return 0;
//}

//int main()
//{
//    int a, i;
//    scanf("%d", &a);
//    for (i = 1;i <= a;i++)
//    {
//     printf("%d ", i);
//    } 
//  printf("\n");
//    while (a)
//    {
//        for (i = 1;i <= a;i++)
//        {
//            printf("%d ", i);
//        }
//        printf("\n");
//        scanf("%d", &a);//这里是先判断再上去做此次不一样
//    }
//    return 0;
//}

//int main()
//{
//    int a, i;
//    scanf("%d", &a);//那不写两遍
//  //省块到下面
//    while (a)
//    {
//        for (i = 1;i <= a;i++)//想这样改等价，for与while同条件进，while行时for也行会执行，然后这次第一次就先做再判断了，while不行时for不执行，但for本来此时就是不执行，但先做再判断的做不仅仅是for，要做的还有printf("%d ", i);，它是必做的
//        {
//            printf("%d ", i);
//        }
//        printf("\n");
//        scanf("%d", &a);
//    }
//    return 0;
//}



//int main()
//{
//	char R, C, F;
//	char arr[] = { 'a','b','c' };//用数组把单个个字符合成的字符串末尾没有\0
//	printf("%s\n", arr);//%s读得懂地址并且会自己往后搜读
//	char brr[] = "abc";//此把字符串放进字符数组里字符串本身就是正常的
//	printf("%c\n", *(arr+1));//整体形式是字符串但也还是数组
//	printf("%s", brr);
//	return 0;
//}



//输入
//3
//3 C
//4 R
//5 F
//
//
//输出
//Total : 10 animals
//Total coneys : 3
//Total rats : 0
//Total frogs : 7
//Percentage of coneys : 0.30 %
//Percentage of rats : 0.00 %
//Percentage of frogs : 0.70

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    int a, i, b, c = 0, d = 0, f = 0, g;
//    char B, C = 'C', R = 'R', F = 'F';
//    scanf("%d", &a);
//    for (i = 0;i < a;i++)
//    {
//        scanf("%d", &b);
//        scanf("%c", &B);
//      //if (strcmp(B, C) && strcmp(B, R))//err --> 使用 strcmp 来比较字符错误: strcmp 用于比较字符串，而你正在比较单个字符.应该使用 == 运算符进行字符比较。
//        if(B != C && B != R)//right
//            f += b;
//        else if (B == R)
//            d += b;
//        else
//            c += b;
//    }
//    g = c + d + f;
//    printf("Total: %d animals\n", g);
//    printf("Total coneys: %d\n", c);
//    printf("Total rats: %d\n", d);
//    printf("Total frogs: %d\n", f);
//    //printf("Percentage of coneys: %.2lf %\n", c / g);//err --> 整数除法出整数int类型的值，值算的时候本来就会缺再加上搜索类型不对
//    //printf("Percentage of coneys: %.2lf %\n", c / (double)g);//err
//    printf("Percentage of coneys: %.2lf %\n", c /(double)g*100);//right
//    printf("Percentage of rats: %.2lf %\n", d /(double)g*100);
//    printf("Percentage of frogs: %.2lf %",f /(double)g*100);
//    return 0;
//}



////跳空白搜索的是scanf里的 %c、%s、%d
//int main()
//{
//	char a = 0;
//	scanf("%c", &a);//-->    bcd
//	printf(" %c\n", a);//--> (两个空格)    //printf那边%前加的空格也是当作打印内容了不起效果
//	printf("%c", a);// (一个空格)
//
//	char c = 0;
//	scanf(" %c", &c);//-->   bcd
//	printf("%c\n", c);//-->b
//	printf(" %c\n", c);//--> b
//
//	char brr[] = "  abc";
//	printf(" %c\n",*(&brr));//--> ?  //字符搜字符串了
//
//
//
//	char arr[10];
//	scanf("%s", &arr);//-->  abc    //scanf里的%都智能跳空格，除了%c的不会智能跳需前加空格才跳
//	printf("%s\n", arr);//-->abc
//	scanf(" %s", &arr);//-->  abc   //其它的%前加空格都没意义
//	printf("%s\n", arr);//-->abc
//
//	char crr[] = "  abc";
//	printf("%s\n", crr);//-->  abc
//	printf(" %s\n", crr);//-->   abc
//
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//    int n, i, x, y, j;
//    scanf("%d", &n);
//    for (i = 0;i < n;i++)
//    {
//        scanf("%d %d", &x, &y);
//        if (x > y)
//        {
//            int change;
//            change = x;
//            x = y;
//            y = change;
//        }
//        int count = 0;
//        for (j = x + 1;j < y;j++)
//        {                     //负奇数
//            if (j % 2 == 1 || j % 2 == -1)
//                count += j;
//        }
//        printf("%d\n", count);
//    }
//    return 0;
//}



//AC 717. 简单斐波那契 -- 2024.11.15

//以下数列 0 1 1 2 3 5 8 13 21 ... 被称为斐波纳契数列。
//这个数列从第 3 项开始，每一项都等于前两项之和。输入一个整数 N，请你输出这个序列的前 N 项。

//long long n, a, b = 1, c;//全局变量如果不赋值 默认为0
//int main() {
//    scanf("%d", &n);
//    while (n--) {//执行n次，()里面不仅值、判断表达式的值，也可以赋值表达式，看表达式左边赋到的值
//        printf("%d ", a);
//        c = a + b;
//        a = b, b = c;
//    }
//}

//int main()
//{
//	int n;
//	scanf("%d", &n);
//	while (n--) // --> 执行n次循环,遍历n-1~0
//                  //5判断可以进来，一进就减1，遍历的是4~0
//	{
//
//	}
//  printf("%d\n", n);//出来后n为-1
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	while(n>2)//执行n-2次
//	return 0;
//}

//int main()
//{
//	int a;
//	if (a = 1)//()里赋值表达式看赋的值
//		printf("hehe\n");
//	if (a = 0)
//		printf("hello\n");
//	return 0;
//}



//AC 722.数字序列和它的和 -- 2024.11.15
//输入若干个整数对M, N，对于每个数对，输出以这两个数为最大值和最小值的公差为1的等差数列。
//注意，当输入整数对中，任意一个数为0或负整数时，立即停止输入，且该组数对无需作任何处理。

//#include <stdio.h>  
//int main()
//{
//    int n, m;//()里面调用函数都行
//    while (scanf("%d %d", &n, &m) == 2 && n > 0 && m > 0)
//        //正常读取，非正常数据读不到也进不来，能加强数据检测进入
//    //while (scanf("%d %d", &n, &m) && n > 0 && m > 0)也行
//    //scanf也是个函数调用也相当于是值，这样循环里的内容外面就不用再写一遍了
//    {
//        if (n > m)
//        {
//            int temp = n;
//            n = m;
//            m = temp;
//        }
//        int s = 0;
//        for (int i = n; i <= m; i++)
//        {
//            printf("%d ", i);
//            s += i;
//        }
//        printf("Sum=%d\n", s);
//    }
//    return 0;
//}



//AC 725.完全数 -- 2024.11.16
//一个整数，除了本身以外的其他所有约数的和如果等于该数，那么我们就称这个整数为完全数。
//例如，6就是一个完全数，因为它的除了本身以外的其他约数的和为 1 + 2 + 3 = 6。
//现在，给定你N个整数，请你依次判断这些数是否是完全数。

//数据范围
//1≤N≤100,1≤X≤108

//#include<stdio.h>
//#include<math.h>
//int main()
//{
//    int n, i, j, a, count;
//    scanf("%d", &n);
//    for (i = 0;i < n;i++)
//    {
//        scanf("%d", &a);
//        if (a == 1)//1这个特殊情况处理，1不是完全数
//        {
//            printf("%d is not perfect\n", a);
//            continue;
//        }
//        count = 0;
//        // 只遍历到 sqrt(a)  这样就不会10的8次方太多而超时了
//        for (j = 1;j <= sqrt(a);j++)
//        {
//            if (a % j == 0)//j-->除数约数
//            {
//                count += j; //从小到中，除数配合商就能全找完
//                if (j != 1 && j != sqrt(a))
//          //商约数这边注意下要求和避免重复算
//          //输入的数字它本身不算进约数的，所以除数为1对应的商为输入数本身的是不算的(要求)
//                    count += a / j;//a/j-->商约数
//            }
//        }
//        if (a == count)
//            printf("%d is perfect\n", a);
//        else
//            printf("%d is not perfect\n", a);
//    }
//    return 0;
//}



//AC 726.质数 -- 2024.11.16
//一个大于1的自然数，如果除了1和它自身外，不能被其他自然数整除则称该数为质数.现在，给定你 N 个大于 1 的自然数，请你依次判断这些数是否是质数。
//输入格式
//第一行包含整数 N，表示共有 N 个测试数据。
//接下来 N
//行，每行包含一个自然数 X
//
//数据范围
//1≤N≤100,1 < X≤107

//#include<stdio.h>
//#include<math.h>
//int main()
//{
//    int n, i, j, count, num;
//    scanf("%d", &n);
//    for (i = 0;i < n;i++)
//    {
//        count = 0;
//        //scanf("%d",&n);//err ——> 改了就改掉上面的循环次数了
//        scanf("%d", &num);
//        //for(j=2;j<n;j++)//改进 ——> 当检查一个数 n 是否是质数时，只需检查到 sqrt(n),，而不是 n-1。这样可以减少计算量
//        for (j = 2;j <= sqrt(num);j++)
//        {
//            if (num % j == 0)
//                count = 1;
//        }
//        if (count == 1)
//            printf("%d is not prime\n", num);
//        else
//            printf("%d is prime\n", num);
//    }
//    return 0;
//
//#include <stdbool.h> 
//bool isPrime(int n) {
//    if (n < 2) return false; // 处理小于 2 的情况  
//    for (int i = 2; i * i <= n; i++)  // 只需检查到 sqrt(n)  
//        if (n % i == 0)  //for后面的一条语句是循环的，都是默认跟一条语句
//            return false; //{}一条总语句是一条语句  非{}的 --> 到;一条语句  //一遇到有就不再判断return就直接结束了
//    return true;
//}
//
//int main() {
//    int n;
//    scanf("%d", &n);
//    while (n--) {
//        int x;
//        scanf("%d", &x);
//        if (isPrime(x))
//            printf("%d is prime\n", x);
//        else
//            printf("%d is not prime\n", x);
//    }
//
//    return 0;
//}



//int main()
//{
//	int i = -1;
//	while (i)//非零即真
//	{
//		printf("hehe\n");
//	}
//	return 0;
//}



//int main()
//{
//	int arr[10], i;//这样创建也行
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//    int arr[10], i;
//    for (i = 0;i < 10;i++)
//    {
//        scanf("%d", (arr + i));
//        if (arr[i] <= 0)
//            arr[i] = 1;
//        printf("X[%d] = %d\n", i, arr[i]);//也放在第一次遍历
//    }
//    /*for (i = 0;i < 10;i++)
//    {
//        printf("X[%d] = %d\n", i, arr[i]);
//    }*/
//    return 0;
//}



//int main()
//{  //可以在这里初始化
//    for (int i = 0; i < 100; i++)
//    {
//
//    }
//}



//int main()
//{
//	int arr[2][3] = { {1,2,3},{4,5,6} };
//	printf("%d\n", *(*(arr + 1) + 1));
//	//(arr+1)还正常，就是解引用时*(arr + 1)变成是地址
//	//就是解引用时本来解出的是在该地址里放的内容(该元素数组的内容)解成了地址(该元素数组的首元素的地址)
//	return 0;
//}


//AC 743.数组的行 -- 2024.11.17
//输入一个二维数组 M[12][12]，根据输入的要求，求出二维数组中某一行的元素的平均值或元素的和。
//输入格式
//第一行输入整数 L ，表示所求的具体行数（行数从 0 开始计数）。
//第二行包含一个大写字母，若为 S，则表示需要求出第 L 行的元素的和，若为 M，则表示需要求出第 L 行的元素的平均值。
//接下来 12 行，每行包含 12 个用空格隔开的浮点数，表示这个二维数组，其中第 i + 1 行的第 j + 1 个数表示数组元素 M[i][j]

//输入顺序是L、S、数组

//行数从 0 开始计数-- > 第1行记成第0行
//输入的数组第行数正常是从第1行记起的  //记第行数时可能会不统一，但角标数是固定统一

//#include<stdio.h>
//int main()
//{
//    int l, i, j;
//    char a;
//    double arr[12][12];
//    scanf("%d", &l);
//    scanf("%c", &a);
//    for (int i = 0;i < 12;i++)
//    {
//        for (int j = 0;j < 12;j++)
//        {
//            scanf("%lf", *(arr + i) + j);
//        }
//
//    }
//    double count = 0;
//    if (a == 'S')
//    {
//        for (j = 0;j < 12;j++)
//        {
//            count += arr[l][j];
//        }
//        printf("%.1lf", count);
//    }
//    else if (a == 'M')
//    {
//        for (j = 0;j < 12;j++)
//        {
//            count += arr[l][j];
//        }
//        printf("%.1lf", count / 12);
//    }
//    return 0;
//}

//int main()
//{
//    int l;
//    char a;
//    scanf("%d", &l);  // 读取一个整数  输入 7
//    scanf("%c", &a);  // 尝试读取一个字符（可能会出错） 输入 'S'
//    /*用户首先输入 7 作为整数，然后按下回车（这将产生一个换行符）。但是，在第二个 scanf（读取 char a 的时候）：
//    由于输入缓冲区中还有未读取的换行符（\n），scanf("%c", &a) 会立刻读取到这个换行符，所以 a 会被赋值为 '\n'，而不是用户想输入的字符 S。*/
//    //输入字符%c搜索字符时会把输入缓冲区的其它的%会跳过的而%c不跳过去读而读错(用户输入的回车'\n'、空格  )
//    printf("%d", l);
//    printf("%c", a);
//    return 0;
//}

//int main()
//{
//    int l;
//    char a;
//    scanf("%d", &l);
//    //getchar();//通常可以在读取字符之前添加一个 getchar()，以消耗掉上一个输入留下的换行符，只能跳过临近的一个换行符
//    scanf(" %c", &a);//也可以 %c，它会跳过所有的空格与\n直到截有
//    printf("%d\n", l);
//    printf("%c\n", a);
//    return 0;
//}

//条件表达式 op == 'S' ? s : s / 12 :
//这是一个 三元运算符，用于根据条件选择输出的值。结构为 condition ? value_if_true : value_if_false。
//op == 'S'：这是条件部分，检查变量 op 是否等于字符 'S'。
//s ：如果 op 是 'S'，则输出当前行所有元素的和。
//s / 12 ：如果 op 不是 'S'（我们假设可能是 'A' 或其他字符），则输出和的平均值，即将和 s 除以 12。

//#include<stdio.h>
//int main()
//{
//    int l;
//    char op;
//    scanf("%d %c", &l, &op); // 输入行索引 l 和操作符 op  
//    double s = 0.0;
//    for (int i = 0; i < 12; i++)
//    {
//        for (int j = 0; j < 12; j++)
//        {
//            double a;
//            scanf("%lf", &a); // 输入矩阵元素  
//            if (i == l)
//            {  //只要这一行的元素和，其它的不存起来不制出表都行
//                s += a; // 累加指定行的元素  
//            }
//        }
//    }
//    printf("%.1lf", op == 'S' ? s : s / 12);
//    return 0;
//}



//int main()
//{
//	int arr[3];// --> 3是数组元素总个数，等于数组最后第个数，比数组最后角标大1
//	return 0;
//}



//AC 745.数组的右上半部分 -- 2024.11.17
//输入的时候是把填满整个数组的数据都输入

//输入一个二维数组 M[12][12]，根据输入的要求，求出二维数组的右上半部分元素的平均值或元素的和。
//右上半部分是指主对角线上方的部分，如下图所示，黄色部分为对角线，绿色部分为右上半部分：
//输入格式
//第一行输入一个大写字母，若为 S，则表示需要求出右上半部分的元素的和，若为 M，则表示需要求出右上半部分的元素的平均值。
//接下来 12 行，每行包含 12 个用空格隔开的浮点数，表示这个二维数组，其中第 i + 1 行的第 j + 1 个数表示数组元素 M[i][j]。
//输出格式
//输出一个数，表示所求的平均数或元素的和的值，保留一位小数。
//输入样例：
//M
//- 6.5 8.2 0.7 9.0 0.8 - 4.3 0.9 - 0.0 - 7.9 7.1 - 1.6 4.6
//- 9.4 - 9.0 1.5 - 9.0 - 5.1 - 0.5 - 2.8 - 9.1 8.0 - 6.9 - 5.5 - 6.6
//- 6.8 0.3 3.8 6.1 - 9.9 - 9.3 8.5 8.6 5.0 6.9 - 3.6 - 3.0
//- 0.8 - 1.6 - 7.3 - 6.7 4.4 - 9.1 - 9.0 1.6 0.3 - 6.0 6.0 - 0.8
//- 0.8 - 6.0 - 4.9 - 3.9 6.4 6.2 - 4.2 - 0.9 7.9 1.6 - 8.2 - 9.2
//7.8 - 5.8 - 5.8 - 5.8 7.2 0.5 - 7.9 1.2 - 6.8 - 9.1 0.3 - 1.4
//4.3 - 7.2 3.5 - 6.4 - 9.1 - 6.0 3.5 - 5.1 - 5.6 - 6.9 - 9.1 - 2.1
//- 7.6 - 7.1 0.7 - 1.7 5.0 - 9.0 1.4 - 6.2 7.6 4.8 - 7.5 4.0
//- 0.2 0.3 - 4.2 8.4 0.7 - 6.4 - 2.7 3.5 - 0.9 3.7 0.9 - 2.7
//7.1 0.1 8.4 - 5.1 - 7.9 - 0.5 - 5.3 - 5.7 - 4.6 9.6 - 8.3 7.0
//9.6 - 9.8 3.3 - 9.9 - 6.8 6.7 3.1 1.2 - 9.5 - 4.3 - 1.7 - 9.7
//1.8 5.0 8.3 - 0.7 - 0.9 3.2 2.5 0.5 7.3 8.3 0.3 0.9

//#include<stdio.h>
//int main()
//{
//    char a;
//    scanf("%c", &a);
//    double arr[12][12], count = 0.0;
//    int b = 0;
//    for (int i = 0;i < 12;i++)
//    {
//        for (int j = 0;j < 12;j++)
//        {
//            scanf("%lf", &arr[i][j]);//全部都来接消掉缓冲区的那些没用的值，用scanf让它输消掉
//            if (i < j)
//            {
//                count += arr[i][j];
//                b++;
//            }
//        }
//    }
//    printf("%.1lf", a == 'S' ? count : count / b);
//    return 0;
//}